//
//  NSString+HX_DES.m
//  UI24-加密（MD5）
//
//  Created by 韩旭 on 16/8/16.
//  Copyright © 2016年 lanou. All rights reserved.
//

#import "NSString+HX_DES.h"
#import <CommonCrypto/CommonCrypto.h>
#import "NSString+HXBase64.h"
//必须8位
#define key @"12345678"
static Byte iv[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
@implementation NSString (HX_DES)
- (NSString *)stringWithDES {
    const char *string = [self UTF8String];
    unsigned char byte[1024];
    size_t dataOutMoved = 0;
    CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved);
    if (cryptorStatus == kCCSuccess) {
        NSData *desData = [NSData dataWithBytes:byte length:dataOutMoved];
        NSString *desBase64String = [desData base64EncodedStringWithOptions:0];
        //        NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
        //        NSString *string = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return desBase64String;
    } else {
        NSLog(@"you are error");
        return nil;
    }
}
- (NSString *)desWithString {
//    将字符串本身转化成C字符串
    
    NSData *DATA = [self base64StringWithData];
//    2. 接收容器
    const void *byte = DATA.bytes;
    //        const char *string = [self UTF8String];
    unsigned char buffer[1024];
//    3. 容器大小
    size_t dataOutMoved = 0;
//    4。des加密过程
//    参数1. 加密或者解密
//    参数2. 加密、解密方式
//    参数3. 分组密码的选择
//    参数4. 密钥
//    参数5. key （密钥） 的大小
//    参数6. 向量
//    参数7. cString的字符串
//    参数8. 长度
//    参数9. 接收的容器
//    参数10. 容器大小
//    参数11. 容器最终的个数
    
    CCCryptorStatus cryptorStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, [DATA length], buffer, 1024, &dataOutMoved);
//    、5.判断是否成功
    if (cryptorStatus == kCCSuccess) {
//        转成字符串---base64返回
        NSData *sourceData = [[NSData alloc] initWithBytes:buffer length:dataOutMoved];
        NSString *sourceString = [[NSString alloc] initWithData:sourceData encoding:NSUTF8StringEncoding];
        return sourceString;
    } else {
//        失败了打印空
        NSLog(@"you are error");
        return nil;
    }
}
@end
